<template>
  <div class="videoMain" ref="playWndBox">
    <div id="playWnd" class="playWnd" ></div>
  </div>
</template>
<script>
export default{
    data(){
        return{
                  // 视频盒子的高度
      playWndHeight: "",
      // 视频盒子的宽度
      playWndWidth: "",
      oWebControl: null,
      initCount: 0,
      pubKey: "",
      cameraIndexCode: "",  // 这里面是监控点编号
      objData: {
        //海康初始化数据
        appkey: "23155016",
        ip: "103.56.152.126",
        secret: "aoJsyhjMz6yo3gJoo39L",
        port: 9443,
        playMode: 0, // 0 预览 1回放
        layout: "1x1", //页面展示的模块数【16】
      },
        }
    },
    mounted(){
        console.log('WebControls',new WebControl())
        this.initPlugin()
    },
    methods:{
            // 创建播放实例
    initPlugin () {
        let that=this
        this.oWebControl = new WebControl({
            szPluginContainer: "playWnd",                       // 指定容器id
			iServicePortStart: 15900,                           // 指定起止端口号，建议使用该值
			iServicePortEnd: 15900,                             
			szClassId:"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",   // 用于IE10使用ActiveX的clsid
			cbConnectSuccess: function () {                     // 创建WebControl实例成功											
				that.oWebControl.JS_StartService("window", {         // WebControl实例创建成功后需要启动服务
					dllPath: "./VideoPluginConnect.dll"         // 值"./VideoPluginConnect.dll"写死 
				}).then(function () {                           // 启动插件服务成功
					that.oWebControl.JS_SetWindowControlCallback({   // 设置消息回调
						cbIntegrationCallBack: that.cbIntegrationCallBack
					});
					
					that.oWebControl.JS_CreateWnd("playWnd", 1000, 600).then(function () { //JS_CreateWnd创建视频播放窗口，宽高可设定
						that.init();  // 创建播放实例成功后初始化
					});
				}, function () { // 启动插件服务失败
				});
			},
			cbConnectError: function () { // 创建WebControl实例失败
				that.oWebControl = null;
				$("#playWnd").html("插件未启动，正在尝试启动，请稍候...");
				WebControl.JS_WakeUp("VideoWebPlugin://"); // 程序未启动时执行error函数，采用wakeup来启动程序
				initCount ++;
				if (initCount < 3) {                             
					setTimeout(function () {
						initPlugin();
					}, 3000)
				} else {
					$("#playWnd").html("插件启动失败，请检查插件是否安装！");
				}
			},
			cbConnectClose: function (bNormalClose) {            
				// 异常断开：bNormalClose = false
				// JS_Disconnect正常断开：bNormalClose = true	
				console.log("cbConnectClose");
				that.oWebControl = null;
				$("#playWnd").html("插件未启动，正在尝试启动，请稍候...");
				WebControl.JS_WakeUp("VideoWebPlugin://");
				initCount ++;
				if (initCount < 3) {
					setTimeout(function () {
						initPlugin();
					}, 3000)
				} else {
					$("#playWnd").html("插件启动失败，请检查插件是否安装！");
				}	
			}
		});
    },
    // 初始化
    init(callback) {
      let that = this;
      that.getPubKey(() => {
        let appkey = that.objData.appkey;                   //综合安防管理平台提供的appkey，必填
        let secret = that.setEncrypt(that.objData.secret); //综合安防管理平台提供的secret，必填
        let ip = that.objData.ip;                           //综合安防管理平台IP地址，必填
        let playMode = that.objData.playMode;               //初始播放模式：0-预览，1-回放
        let port = that.objData.port;                       //综合安防管理平台端口，若启用HTTPS协议，默认443
        let snapDir = "D:\\SnapDir";                        //抓图存储路径
        let videoDir = "D:\\VideoDir";                       //紧急录像或录像剪辑存储路径
        let layout = that.objData.layout;                   //playMode指定模式的布局
        let enableHTTPS = 1;                                //是否启用HTTPS协议与综合安防管理平台交互，这里总是填1
        let encryptedFields = "secret";                     //加密字段，默认加密领域为secret
        let showToolbar = 1;                                //是否显示工具栏，0-不显示，非0-显示
        let showSmart = 1;                                  //是否显示智能信息（如配置移动侦测后画面上的线框），0-不显示，非0-显示
        let buttonIDs = "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮
        // var toolBarButtonIDs = "2049,2304" // 工具栏上自定义按钮
        that.oWebControl
          .JS_RequestInterface({
            funcName: "init",
            argument: JSON.stringify({
              appkey: appkey,                 //API网关提供的appkey
              secret: secret,                 //API网关提供的secret
              ip: ip,                         //API网关IP地址
              playMode: playMode,             //播放模式（决定显示预览还是回放界面）
              port: port,                     //端口
              snapDir: snapDir,               //抓图存储路径
              videoDir: videoDir,             //紧急录像或录像剪辑存储路径
              layout: layout,                 //布局
              enableHTTPS: enableHTTPS,       //是否启用HTTPS协议
              encryptedFields: encryptedFields, //加密字段
              showToolbar: showToolbar,       //是否显示工具栏
              showSmart: showSmart,           //是否显示智能信息
              buttonIDs,                      //自定义工具条按钮
            }),
          })
          .then(function () {
            that.oWebControl.JS_Resize(that.playWndWidth, that.playWndHeight); // 初始化后resize一次，规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
            if (callback) {
              callback();
            }
            // 隐藏
            // that.oWebControl.JS_HideWnd()
          });
      });
    },
        // 获取公钥
        getPubKey(callback) {
      let that = this;
      this.oWebControl
        .JS_RequestInterface({
          funcName: "getRSAPubKey",
          argument: JSON.stringify({
            keyLength: 1024,
          }),
        })
        .then(function (oData) {
          if (oData.responseMsg.data) {
            that.pubKey = oData.responseMsg.data;
            callback();
          }
        });
    },
    // RSA 加密
    setEncrypt(value) {
      let that = this;
      let encrypt = new window.JSEncrypt();
      encrypt.setPublicKey(that.pubKey);
      return encrypt.encrypt(value);
    },
        // 回调的消息
        cbIntegrationCallBack(oData) {
      let { responseMsg: type } = oData;
      if (type === "error") {
        console.log('errors')
      }
    },
    }
}
</script>